package com.dfbz.service;

import com.dfbz.model.User;
import com.dfbz.model.UserFocus;
import com.dfbz.model.UserInfo;

import java.util.List;
import java.util.Map;

public interface UserService {
    /**
     * 通过用户名找到用户对象
     * @param useruname
     * @return User
     */
    User findByName(String useruname);
    /**
     * 通过email找到用户对象
     * @param email
     * @return User
     */
    User findByEmail(String email);
    /**
     * 通过邮箱或者用户名找到用户对象检查是否能注册
     * @param email
     * @return true表示能注册
     */
    boolean checkByEmailOrName(String email, String username);

    /**
     * 添加新用户
     * @param user 用户对象
     * @return 添加成功返回true 失败返回false
     */
    boolean addUser(User user);

    /**
     * 发送邮件获得验证码
     * @param email
     * @return 验证码
     */
    String sendEmailCode(String email);

    /**
     * 重置用户账户密码
     * @param email
     * @param password
     * @return true 表示重置成功
     */
    boolean resetPassword(String email, String password);

    /**
     * 查找用户基本信息
     * @param username 用户名
     * @return Map对象 里面有 realName 和 deptName
     */
    Map<String, Object> findUserBaseInfo(String username);

    /**
     * 查找用户个人中心信息
     * @param id
     * @return map 对象所有信息
     */
    Map<String, Object> getUserInfo(String id);

    /**
     * 更新用户登录时间
     * @param  userId 用户id
     */
    void updateLoginTime(Integer userId);

    /**
     * 分页查询用户列表信息
     * 当前登录过的用户id
     * @param currentPage 当前页面
     * @param name 模糊查寻用户姓名
     * @return 列表对象
     */
    List<Map<String,Object>> getUserList(String userId,int currentPage, String name);

    /**
     *分页查询用户总数量信息
     * @param name 模糊查寻用户姓名
     * @return 总用户数
     */
    long getUserCount(String name);

    /**
     * 关注用户
     * @param userId 当前登录用户id
     * @param ufId 关注用户id
     * @return
     */
    boolean followUser(String userId, String ufId);

    /**
     * 根据用户以及关注对应用户id 查找信息
     * @param userId 当前登录的用户id
     * @param ufId 关注对方的用户id
     * @return 关注对象信息
     */
    UserFocus getFollowUser(String userId, String ufId);

    /**
     * 根据关注表主键ID 取消关注
     * @param id 主键ID
     * @return
     */
    boolean unFollowUser(Integer id);

    /**
     * 更新头像到数据库
     * @param path 头像虚拟路径
     */
    void uploadImg(String userId,String path);

}